package co.edu.usbcali.hibernate.logica;

import java.util.List;

import co.edu.usbcali.hibernate.modelo.Vacunas;
import co.edu.usbcali.hibernate.persistencia.DAOFactory;
import co.edu.usbcali.hibernate.persistencia.EntityManagerHelper;
import co.edu.usbcali.hibernate.persistencia.IVacunasDAO;

public class VacunaLogica implements IVacunaLogica {
	
	IVacunasDAO vacunasDAO = DAOFactory.getVacunasDAO();

	public void borrarVacuna(Long vacCodigo, String vacNombre) throws Exception {
		Vacunas entity = null;
		try {
			if (vacCodigo == null || vacCodigo == 0) {
				throw new Exception("El codigo de la vacuna es obligatorio");
			}
			if (vacNombre == null || vacNombre.trim().equals("")) {
				throw new Exception("El nombre de la vacuna es obligatorio");
			}
			
			EntityManagerHelper.beginTransaction();
			entity = vacunasDAO.findById(vacCodigo);
			if (entity == null) {
				throw new Exception("La vacuna no existe");
			}
			
			vacunasDAO.delete(entity);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}

	}

	public Vacunas consultarVacunaPorId(Long vacCodigo) throws Exception {
		Vacunas entity = null;
		try {
			if (vacCodigo == null || vacCodigo == 0) {
				throw new Exception("El codigo de la vacuna es obligatorio");
			}
						
			EntityManagerHelper.beginTransaction();
			entity = vacunasDAO.findById(vacCodigo);
						
			return entity;

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public List<Vacunas> consultarVacunas() throws Exception {
		try {
			EntityManagerHelper.beginTransaction();
			return vacunasDAO.findAll();			
		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}
	}

	public void crearVacuna(Long vacCodigo, String vacNombre) throws Exception {
		Vacunas entity = null;
		try {
			if (vacCodigo == null || vacCodigo == 0) {
				throw new Exception("El codigo de la vacuna es obligatorio");
			}
			if (vacNombre == null || vacNombre.trim().equals("")) {
				throw new Exception("El nombre de la vacuna es obligatorio");
			}
			
			EntityManagerHelper.beginTransaction();
			entity = vacunasDAO.findById(vacCodigo);
			if (entity != null) {
				throw new Exception("La vacuna ya existe");
			}
			entity = new Vacunas(vacCodigo, vacNombre);
			vacunasDAO.save(entity);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}


	}

	public void modificarVacuna(Long vacCodigo, String vacNombre)
			throws Exception {
		Vacunas entity = null;
		try {
			if (vacCodigo == null || vacCodigo == 0) {
				throw new Exception("El codigo de la vacuna es obligatorio");
			}
			if (vacNombre == null || vacNombre.trim().equals("")) {
				throw new Exception("El nombre de la vacuna es obligatorio");
			}
			
			EntityManagerHelper.beginTransaction();
			entity = vacunasDAO.findById(vacCodigo);
			if (entity == null) {
				throw new Exception("La vacuna no existe");
			}
			entity.setVacNombre(vacNombre);
			vacunasDAO.update(entity);
			EntityManagerHelper.commit();

		} catch (Exception e) {
			EntityManagerHelper.rollback();
			e.printStackTrace();
			throw e;
		} finally {
			EntityManagerHelper.closeEntityManager();
		}

	}

}
